#include "csapp.h"
typedef struct sockaddr SA;
char str[10][1024]={
"欢迎来到jyq高级审判法院！少年，你为何而来？",
"原来如此！这可是滔天大罪！先自赏巴掌！",
"说！有何缘由竟敢不回你jyq神的消息！",
"先自赏巴掌！"
"你觉得我是想听你的理由吗！再自赏巴掌！！",
"身为jyq神管辖下的国度，你饭发了你知道吗！",
"先道歉！",
"再道歉！",
"继续道歉！",
"罚你今后秒回我们至上之神的消息！再发现类似情节，绝不姑息！"
};
void printlove(){
	int  i, j, k, l, m;
	char c='*'; //ASCII码里面 3 就是一个字符小爱心
	for (i=1; i<=5; i++)    printf("\n"); //开头空出5行
	for (i=1; i<=3; i++) { //前3行中间有空隙分开来写
	for (j=1; j<=32-2*i; j++)  printf(" "); //左边的空格，每下一行左边的空格比上一行少2个 //8*n-2*i
	for (k=1; k<=4*i+1; k++)  printf("%c", c);//输出左半部分字符小爱心
	for (l=1; l<=13-4*i; l++)  printf(" "); //中间的空格，每下一行的空格比上一行少4个
	for (m=1; m<=4*i+1; m++)  printf("%c", c);//输出右半部分字符小爱心
	printf("\n");  //每一行输出完毕换行
	}
	for (i=1; i<=3; i++) { //下3行中间没有空格
	for (j=1; j<=24+1; j++)   printf(" "); //左边的空格 //8*(n-1)+1
	for (k=1; k<=29; k++)   printf("%c", c);//输出字符小爱心
	printf("\n");  //每一行输出完毕换行
	}
	for (i=7; i>=1; i--) { //下7行
	for (j=1; j<=40-2*i; j++)  printf(" "); //左边的空格，每下一行左边的空格比上一行少2个//8*(n+1)-2*i
	for (k=1; k<=4*i-1; k++)  printf("%c", c);//每下一行的字符小爱心比上一行少4个（这个循环是i--）
	printf("\n");  //每一行输出完毕换行
	}
	for (i=1; i<=39; i++)    printf(" "); //最后一行左边的空格
	printf("%c\n", c);  //最后一个字符小爱心
	for (i=1; i<=5; i++)    printf("\n"); //最后空出5行
	return;

}
void echo(int connfd){
	size_t n;
	char buf[MAXLINE];
	rio_t rio;
	Rio_readinitb(&rio,connfd);
	int cnt=0;
	while(1){
		n=Rio_readlineb(&rio,buf,MAXLINE);
		if(n==0) break;
		printf("%s\n",str[cnt++]);
		if(cnt==9) break;
//		printf("Receive: %s\n",buf);
//		printf("server received %d bytes\n",(int)n);
		Rio_writen(connfd,buf,n);
	}
	printlove();
	printf("由jyq真爱协会协同制作！！！\n");
	return;
}
int main(int argc,char **argv){
	int listenfd,connfd;
	socklen_t clientlen;
	struct sockaddr_storage clientaddr;// Ensure the store is enough
	char client_hostname[MAXLINE],client_port[MAXLINE];
	if(argc!=2){//More than one input 
		fprintf(stderr,"usage:%s <port>\n",argv[0]);
		exit(0);
	}
	listenfd=Open_listenfd( atoi(argv[1]) );
	while(1){
		clientlen = sizeof(struct sockaddr_storage);
		connfd = Accept(listenfd,(SA *)&clientaddr,&clientlen);
		getnameinfo((SA *)&clientaddr,clientlen,client_hostname,MAXLINE,client_port,MAXLINE,0);
		printf("Connected to (%s,%s)\n",client_hostname,client_port);
		echo(connfd);
		close(connfd);
	}
	exit(0);
}
